// Lindsay Gilmour
// Adam Lusch
// Dan Niceswanger
//
// Computer Graphics Project 2:
// Teapot racing!

#ifndef TRACK_H
#define TRACK_H

#include <GL/glut.h>

#include <Box2D.h>

#include "Checkpoint.h"
#include "util.h"

#include <vector>

class Track
{
	public:
	
		static void setup();
		static void cleanup();
	
		Track(b2World*);
		~Track();

		void draw(bool = true) const;
		
	private:
		
		static GLuint baseList;
		static GLuint bgList;

		static GLuint leaves;
		static GLuint wood;
		static GLuint indoorwood;
		static GLuint medRoadf;
		static GLuint medRoadh;
		static GLuint medRoad;
		static GLuint medRoadTR;
		static GLuint medRoadBL;
		static GLuint medRoadTL;
		static GLuint medRoadBR; 
		static GLuint medRoad2;
		static GLuint medRoad2TL;
		static GLuint medRoad2BL;
		static GLuint medRoad2TR;
		static GLuint medRoad2BR;
		static GLuint medRoad1L;
		static GLuint medRoad1R;
		static GLuint medRoad1UP;
		static GLuint medRoadTriTR;
		static GLuint medRoadTriTL;
		static GLuint bumpers;
		static GLuint grass;
		static GLuint lake;
		static GLuint sand;
		static GLuint oil;
		static GLuint people;
		static GLuint checks;
		static GLuint banner;
		static GLuint startfinish;
		
		static void drawSmallRoad();
		static void drawSmallRoad2();
		static void drawMediumRoadFull();
		static void drawMediumRoadHalf();
		static void drawMediumRoad();
		static void drawMediumRoad_TR();
		static void drawMediumRoad_TL();
		static void drawMediumRoad_BR();
		static void drawMediumRoad_BL();
		static void drawMediumRoad2();
		static void drawMediumRoad2_TR();
		static void drawMediumRoad2_TL();
		static void drawMediumRoad2_BR();
		static void drawMediumRoad2_BL();
		static void drawMediumRoad1L();
		static void drawMediumRoad1R();
		static void drawMediumRoad1UP();
		static void drawLargeRoad();
		static void drawBumpers();
		static void drawFencePost();
		static void drawBanner();
		static void drawSmallTriangle_TL();
		static void drawSmallTriangle_BL();
		static void drawSmallTriangle_BR();
		static void drawSmallTriangle_TR();
		static void drawLargeTriangle_TL();
		static void drawLargeTriangle_BL();
		static void drawLargeTriangle_BR();
		static void drawLargeTriangle_TR();
		static void drawTrafficCone();
		static void drawTree();
		static void drawLake();
		static void drawOil();
		static void drawAudience();
		static void drawGroundPlane();
		static void drawStartingLine();
		static void drawMap();
};

#endif
